package com.ruoyi.app.dyh.hxf.controller;

import com.ruoyi.app.dyh.hxf.domain.Message;
import com.ruoyi.app.dyh.hxf.service.IMessageService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api("消息")
@RestController
@RequestMapping("/message")
public class MessageController extends BaseController {
    @Autowired
    private IMessageService messageService;

    /**
     * 获取自己者接收的消息列表（适用于手机端）
     * mgsStatus 消息类型（0系统消息，1活动消息,2谏言消息,3其他）
     * 排除了3其他消息（3为后台看的消息屏蔽掉了有需要的自己改一下）
     * @param message 消息
     * @return
     */
    @ApiOperation("获取自己的者接收的消息列表")
//    @PreAuthorize("@ss.hasPermi('system:message:list')")
    @GetMapping("/list")
    public TableDataInfo list(Message message) {
        startPage();
        Long userId = getLoginUser().getUserId();
        message.setReceiverId(String.valueOf(userId));
        List<Message> list = messageService.selectMessageList(message);
        return getDataTable(list);
    }

    /**
     * 获取自己的发送消息列表（适用于电脑端）
     * mgsStatus 消息类型（0系统消息，1活动消息,2谏言消息,3其他）
     * 排除了3其他消息（3为后台看的消息屏蔽掉了有需要的自己改一下）
     * @param message 消息
     * @return
     */
    @ApiOperation("获取自己的发送消息列表")
//    @PreAuthorize("@ss.hasPermi('system:message:list')")
    @GetMapping("/listMaster")
    public TableDataInfo listMaster(Message message) {
        startPage();
        String username = getLoginUser().getUsername();
        message.setCreateBy(username);
        List<Message> list = messageService.selectMessageList(message);
        return getDataTable(list);
    }

    /**
     * 根据消息获取消息详细信息（电脑端）
     *
     * @param msgId 消息Id
     * @return
     */
    @ApiOperation("根据消息获取消息详细信息")
//    @PreAuthorize("@ss.hasPermi('system:message:query')")
    @GetMapping(value = "/{msgId}")
    public AjaxResult getInfo(@PathVariable String msgId) {
        return AjaxResult.success(messageService.selectMessageCreateByById(msgId));
    }

    /**
     * 新增消息信息(电脑端)
     *
     * @param message 消息
     * @return 结果
     */
    @ApiOperation("新增消息")
//    @PreAuthorize("@ss.hasPermi('system:message:add')")
    @Log(title = "通知公告", businessType = BusinessType.INSERT)
    @PostMapping("/{msgIds}")
    public AjaxResult add(@Validated @RequestBody Message message, @PathVariable Long[] msgIds) {

        Long userId = getLoginUser().getUserId();
        message.setCreateBy(getLoginUser().getUsername());
        message.setCreateTime(DateUtils.getNowDate());
        message.setIsDelete("1");
        for (Long msgId : msgIds) {
            message.setReceiverId(String.valueOf(Math.toIntExact(msgId)));
            messageService.insertMessage(message);
        }
        message.setReceiverId(String.valueOf(Math.toIntExact(userId)));
        return toAjax(messageService.insertMessage(message));
    }

    /**
     * 删除收到的消息信息（逻辑删除）
     *
     * @param msgIds 删除接受到的消息或者是发送的消息不会删除发送给别人的消息
     * @return
     */
    @ApiOperation("删除收到的消息信息")
//    @PreAuthorize("@ss.hasPermi('system:message:remove')")
    @Log(title = "删除收到的消息信息", businessType = BusinessType.DELETE)
    @DeleteMapping("/{msgIds}")
    public AjaxResult delete(@PathVariable Long[] msgIds) {
        return toAjax(messageService.deleteMessageByIds(msgIds));
    }

    /**
     * 撤回消息信息（全部撤回逻辑删除电脑端）
     *
     * @param msgIds 撤回或者批量撤回消息（撤回会附带着已经发送给的人）
     * @return
     */
    @ApiOperation("撤回消息信息")
//    @PreAuthorize("@ss.hasPermi('system:message:remove')")
    @Log(title = "撤回消息信息", businessType = BusinessType.DELETE)
    @DeleteMapping("/remove/{msgIds}")
    public AjaxResult remove(@PathVariable Long[] msgIds) {
        for (Long msgId : msgIds) {
            Long userId = getLoginUser().getUserId();
            Message message = messageService.selectMessageCreateByById(String.valueOf(msgId));
            message.setUpdateBy(String.valueOf(userId));
            message.setUpdateTime(DateUtils.getNowDate());
            messageService.deleteMessage(message);

        }
        return AjaxResult.success();
    }
}
